import numpy as np

from core.data.dataset import Dataset


class SinCurve(Dataset):
    """
    正弦曲线数据集类，用于生成正弦曲线的数据。

    Attributes:
        data (numpy.ndarray): 输入数据，每个元素是正弦曲线上的点。
        label (numpy.ndarray): 目标标签，每个元素是对应点的下一个点。
    """

    def prepare(self):
        """
        准备数据集。生成正弦曲线的数据，包括训练和测试集。
        """
        num_data = 1000
        dtype = np.float64

        x = np.linspace(0, 2 * np.pi, num_data)
        noise_range = (-0.05, 0.05)
        noise = np.random.uniform(noise_range[0], noise_range[1], size=x.shape)

        if self.train:
            # 对于训练集，添加随机噪声
            y = np.sin(x) + noise
        else:
            # 对于测试集，生成不带噪声的正弦曲线
            y = np.cos(x)

        y = y.astype(dtype)
        self.data = y[:-1][:, np.newaxis]
        self.label = y[1:][:, np.newaxis]

